/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.cliente.usuario.vista;

import co.com.cliente.Services;
import co.com.cliente.usuario.estructura.UsuarioDS;
import co.com.cliente.usuario.estructura.UsuarioRecord;

import co.com.entities.Usuario;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.DoubleClickEvent;
import com.smartgwt.client.widgets.events.DoubleClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
import java.util.List;

/**
 *
 * @author ias
 */
public class AsignarUsuario extends Window{

    private ListGrid usuarioGrid;
    
    public AsignarUsuario(final ListGrid gridUsuarios){
        setShowModalMask(false);
        setWidth(800);
        setHeight(400);
        usuarioGrid = new ListGrid();
        usuarioGrid.setWidth100();
        usuarioGrid.setHeight100();
        usuarioGrid.setDataSource(new UsuarioDS());
        usuarioGrid.setAutoFetchData(true);
        usuarioGrid.setFields(UsuarioRecord.getFields());
        usuarioGrid.setEmptyMessage("No hay registros para mostrar");
        usuarioGrid.setSelectionType(SelectionStyle.SIMPLE);
        usuarioGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
        usuarioGrid.setFilterOnKeypress(true);
        usuarioGrid.setShowFilterEditor(true);
        usuarioGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {

            public void onRecordDoubleClick(RecordDoubleClickEvent event) {
                Usuario usuario = event.getRecord().getAttributeAsObject("Usuario") == null ? null: (Usuario)event.getRecord().getAttributeAsObject("Usuario");
                if(usuario != null){
                    if(validarUsuario(gridUsuarios, usuario.getNmdocumento())){
                        gridUsuarios.addData(new UsuarioRecord(usuario));
                    }
                    else{
                        SC.say("El usuario ya se encuetra asociado al descubrimiento");
                    }
                    destroy();
                }
            }
        });
        
        addMember(usuarioGrid);
        centerInPage();
        setTitle("Asignar usuario");
        setCanDrop(false);
        setCanDragResize(false);
        
        
        cargarUsuarios();
        show();
    }
    
    private void clearResults() {
        DataSource ds = usuarioGrid.getDataSource();
        for (ListGridRecord record : usuarioGrid.getRecords()) {
            ds.removeData(record);
        }
    }
    
    private void cargarUsuarios(){
        Services.getUsuarioServices().consultarUsuarios(new AsyncCallback<List<Usuario>>() {

            public void onFailure(Throwable caught) {
                caught.getMessage();
            }

            public void onSuccess(List<Usuario> result) {
                clearResults();
                DataSource ds = usuarioGrid.getDataSource();
                for (int i = 0; i < result.size(); i++) {
                    ds.addData(new UsuarioRecord(result.get(i)));
                }
            }
        });
    }
    
    public Boolean validarUsuario(ListGrid grid, String identificacion){
        for (ListGridRecord record : grid.getRecords()) {
            Usuario usuario = record.getAttributeAsObject("Usuario") == null ? null: (Usuario)record.getAttributeAsObject("Usuario");
            if(usuario.getNmdocumento().equals(identificacion)){
                return false;
            }
        }
        return true;
    }
}
